package com.kuangstudy.service.creatorid;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * @Author 徐柯
 * @Description 统一订单流水号
 * @Date 19:29 2021/5/20
 * @Param
 * @return
 **/
@Component
public class SequenceUtils {

    @Autowired
    CacheService cacheService;
    // 1：每天公司的订单数量，如果一天是几百写 3 几千就 4 几万 5
    static final int DEFAULT_LENGTH = 3;

    public String getSequence() {
        // 1： 时间前缀
        String currentDate = new SimpleDateFormat("yyyyMMdd").format(new Date());
        // 2：redis递增获取每天的递增数量
        Long num = cacheService.getIncrementNum("id:generator:order:" + currentDate);
        // 3：获取递增长度，是否小于DEFAULT_LENGTH 如果小于就前面补零。如果大于就递增即可
        String str = String.valueOf(num);
        // 4：补零操作
        int len = str.length();
        // 4-1：是否小于DEFAULT_LENGTH 如果小于就前面补零。如果大于就递增即可
        StringBuilder sb = new StringBuilder();
        // 5：添加时间
        sb.append(currentDate);
        if (len >= DEFAULT_LENGTH) {
            sb.append(str);
            return sb.toString();
        }

        int rest = DEFAULT_LENGTH - len;
        for (int i = 0; i < rest; i++) {
            sb.append('0');
        }

        sb.append(str);
        // 6： 时间+补零操作返回订单流水号
        return sb.toString();
    }
}
